/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ConsultaURL;

import corretorgramatical.Palavra;
import persistencia.DatabaseCommunication;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class URLCommunication {

    private DatabaseCommunication dbComunic;

    public static final String URL_BASE = "http://www.priberam.pt/DLPO/default.aspx?pal=";

    public URLCommunication(DatabaseCommunication dbComunic) {
        this.dbComunic = dbComunic;
    }

    public static String ConsultaPalavra(String palavra) throws MalformedURLException, IOException {

        String urlCompleta = URL_BASE + palavra;

        URL url = new URL(urlCompleta);
        BufferedReader readerClasse = new BufferedReader(new InputStreamReader(url.openStream()));

        int numeroLinhasClasse = 0;

        String[] linhasClasse = new String[100];

        String line;
        String informacoes_adicionais = "";
        String classesProcessadas = "";

        //captura as linhas da URL que contem as classes gramaticais e a linha
        //que contem as informacoes adicionais
        while ((line = readerClasse.readLine()) != null) {

            if ( line.contains("<Categoria>") )
                linhasClasse[ numeroLinhasClasse++ ] = line;

            //retira da linha de informacoes adicionais o que eh desnecessario
            if ( line.contains( "</tr><tr><td><div>" ) )
                informacoes_adicionais = line.substring( line.indexOf( "</tr><tr><td><div>" ) + 18 );

        }

        if (linhasClasse.length < 2)
            return null;

        //System.out.println( informacoes_adicionais );

        String[] classes = new String[ numeroLinhasClasse -  1 ];

        //retira da linha da classe gramatical o que eh desnecessario
        for( int i = 1; i < numeroLinhasClasse; i++ ){

            int begin = linhasClasse[i].indexOf("<Categoria>") + 11;
            int end = linhasClasse[i].indexOf("</Categoria>");

            classes[i - 1] = linhasClasse[i].substring(begin, end);

            //System.out.println(classes[i - 1]);

        }

        classesProcessadas = processaClasses(classes, informacoes_adicionais);

        System.out.println( classesProcessadas );

        return classesProcessadas;

    }

    public void adicionarAoBancoDeDados(Palavra palavra) {
        dbComunic.adicionarPalavra( palavra );
    }

    public static String processaClasses(String[] classes, String informacoes_adicionais){
        
        String ret = "";

        if (classes.length > 0) {
            String i = classes[0];
            ret += processaClasseIndividual(i, informacoes_adicionais);
        }

        //for( String i : classes )
        //    ret += processaClasseIndividual(i, informacoes_adicionais) + "|";

        return ret;

    }

    public static String processaClasseIndividual(String classe, String informacoes_adicionais){

        //artigos
        if( classe.contains( "art." ) ){

            String ret = "art.";

            //genero
            if( informacoes_adicionais.contains( "masc." ) )
                ret += "m.";
            else if( informacoes_adicionais.contains( "fem." ) )
                ret += "f.";
            else if( classe.contains( " m." ) )
                ret += "m.";
            else if( classe.contains( " f." ) )
                ret += "f.";
            else
                ret += "m.";

            //numero
            if( informacoes_adicionais.contains( "pl." ) )
                ret += "pl.";
            else if( informacoes_adicionais.contains( "sing." ) )
                ret += "sing.";
            else if( classe.contains( "pl." ) )
                ret += "pl.";
            else if( classe.contains( "sing." ) )
                ret += "sing.";
            else
                ret += "sing.";

            if( !ret.equals( "art." ) )
                return ret;

            return "art.m.sing.";

        }

        //substantivos
        if( classe.contains( "s." ) ){

            String ret = "s.";

            //genero
            if( informacoes_adicionais.contains( "masc." ) )
                ret += "m.";
            else if( informacoes_adicionais.contains( "fem." ) )
                ret += "f.";
            else if( classe.contains( " m." ) )
                ret += "m.";
            else if( classe.contains( " f." ) )
                ret += "f.";
            else
                ret += "m.";

            //numero
            if( informacoes_adicionais.contains( "pl." ) )
                ret += "pl.";
            else if( informacoes_adicionais.contains( "sing." ) )
                ret += "sing.";
            else if( classe.contains( "pl." ) )
                ret += "pl.";
            else if( classe.contains( "sing." ) )
                ret += "sing.";
            else
                ret += "sing.";

            if( !ret.equals( "s." ) )
                return ret;

            return "s.m.sing.";

        }

        //verbos
        if( informacoes_adicionais.contains( "pess." ) ){

            char n = informacoes_adicionais.charAt( 0 );

            if( informacoes_adicionais.contains( "sing." ) ){
                if( n == '1' ) return "verbo1";
                if( n == '2' ) return "verbo2";
                if( n == '3' ) return "verbo3";
            }

            if( informacoes_adicionais.contains( "pl." ) ){
                if( n == '1' ) return "verbo4";
                if( n == '2' ) return "verbo5";
                if( n == '3' ) return "verbo6";
            }

        }

        //adjetivos
        if( classe.contains( "adj." ) )
            //genero
            if( informacoes_adicionais.contains( "pl." ) )
                return "adj.pl.";
            else
                return "adj.sing.";

        //conjuncoes
        if( classe.contains( "conj." ) )
            return "conj.";

        //preposicoes
        if( classe.contains( "prep." ) )
            return "prep.";

        //pronomes
        if( classe.contains( "pron." ) )
            return "pron.";

        return "";

    }

}
